<?php
/** @name : Console.php - @author : theerasak.p - @since : 21 �.�. 2554 20:49:42 - @encoding : UTF-8 */

class Console {

	public static $message;
	/**
	 * @method สร้างข้อมูลพื้นฐานเพื่อจะใช้ในการเขียนข้อมูลออกทาง Console สำหรับการ Debug 
	 * @param ไม่มี
	 * @return ไม่มี
	 * @example Console::start();
	 */
	public static function start() {

		if(Config::$console)
		{
			if (!defined("LOG"))    define("LOG",1);
			if (!defined("INFO"))   define("INFO",2);
			if (!defined("WARN"))   define("WARN",3);
			if (!defined("ERROR"))  define("ERROR",4);

			define("NL","\r\n");
			echo '<script type="text/javascript">'.NL;

			/// this is for IE and other browsers w/o console
			echo  'if (!window.console) console = {};';
			echo 'console.log = console.log || function(){};';
			echo 'console.warn = console.warn || function(){};';
			echo 'console.error = console.error || function(){};';
			echo 'console.info = console.info || function(){};';
			echo 'console.debug = console.debug || function(){};';
			echo '</script>';
			/// end of IE
		}
	}
	
	/**
	 * @method เขียนข้อมูลออกทาง Console สำหรับใช้ในการ Debug โปรแกรม
	 * @param name = ข้อความที่ต้องการแสดงใน Console, var= , type=ชนิดของการเขียน เช่น อยากให้แสดงแบบ LOG, ERROR หรือแค่เตือน (Warning)
	 * @return ไม่มี
	 * @example Console::write("ทดสอบ");
	 */
	public static function write($name, $var = null, $type = LOG) {
		
		// แปลงเพื่อให้แสดงหลายบรรทัดได้
		$name = preg_replace("%\n%", "\\n\\", $name);
		
		if(Config::$console)
		{
			echo  '<script type="text/javascript">'.NL;
			switch($type) {
				case LOG:
					
					echo 'console.log("KOOK-CONSOLE (Log): '.$name.'");'.NL;
					break;
				case INFO:
					echo  'console.info("KOOK-CONSOLE (Info): '.$name.'");'.NL;
					break;
				case WARN:
					echo 'console.warn("KOOK-CONSOLE (Warning): '.$name.'");'.NL;
					break;
				case ERROR:
					echo 'console.error("KOOK-CONSOLE (Error): '.$name.'");'.NL;
					break;
			}

			if (!empty($var)) {
				if (is_object($var) || is_array($var)) {
					$object = json_encode($var);
					echo 'var object'.preg_replace('~[^A-Z|0-9]~i',"_",$name).' = \''.str_replace("'","\'",$object).'\';'.NL;
					echo 'var val'.preg_replace('~[^A-Z|0-9]~i',"_",$name).' = eval("(" + object'.preg_replace('~[^A-Z|0-9]~i',"_",$name).' + ")" );'.NL;
					switch($type) {
						case LOG:
							echo 'console.debug(val'.preg_replace('~[^A-Z|0-9]~i',"_",$name).');'.NL;
							break;
						case INFO:
							echo 'console.info(val'.preg_replace('~[^A-Z|0-9]~i',"_",$name).');'.NL;
							break;
						case WARN:
							echo 'console.warn(val'.preg_replace('~[^A-Z|0-9]~i',"_",$name).');'.NL;
							break;
						case ERROR:
							echo 'console.error(val'.preg_replace('~[^A-Z|0-9]~i',"_",$name).');'.NL;
							break;
					}
				} else {
					switch($type) {
						case LOG:
							echo 'console.debug("'.str_replace('"','\\"',$var).'");'.NL;
							break;
						case INFO:
							echo 'console.info("'.str_replace('"','\\"',$var).'");'.NL;
							break;
						case WARN:
							echo 'console.warn("'.str_replace('"','\\"',$var).'");'.NL;
							break;
						case ERROR:
							echo 'console.error("'.str_replace('"','\\"',$var).'");'.NL;
							break;
					}
				}
			}
			echo '</script>'.NL;
		}
	}

	/**
	 * @method ดึง url ของเว็ปไซท์
	 * @param หากต้องการดึงข้อมูลเว็ปไซท์เท่านั้นไม่ต้องใส่ แต่จะใส่ ตัวแปรเพื่อต้องการดึงค่า url โดยระบุ subdomain
	 * @return string
	 * @example Config::site()/xxx.html
	 */
	public static function writeToConsole()
	{
		if(Config::$console)
		{
			echo self::$message;
			self::$message = "";
		}
	}
}

?>